<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
  // 什么是es6?
  // es和和js的关系？es 是 js 的标准。6是版本号。6的版本相对于之前，是一个大的变革。
    // 1.let const
    // 2.解构赋值
    // 3.模版字符串
    // 4.Set  map
    // 5.Symbol
    // 6.箭头函数
    // 7.Promsie
    // 8.Async await
    // 9.Class
    // 10.模块化导入导出

    // 1.let const var 区别
    // var 声明的全局变量都会自动挂在到 window。
    // var a = 10;
    // console.log(window);

    // let var，都是声明变量的。
    // 1.var 有变量提升(提升的是变量名，并不是赋值)，let 和const 都没有。
    // console.log(a);
    // var  a = 10;
    // var a;
    // console.log(a);
    // a = 10;
    
    // let 和 const 有块级作用域（以{}为分隔符），var没有。
    // if(true){
    //   let  a = 10
    //   console.log(a);
    // }
    // console.log(a);
    // for(var i = 0;i<10;i++){
    //     setTimeout(() => {
    //       console.log(i);
    //     })
    // }
    // for(let i = 0;i<10;i++){
    //     setTimeout(() => {
    //       console.log(i);
    //     })
    // }
    
    //  const 是声明常量的,一单声明，不允许修改。声明必须赋值。如果const声明的是一个引用数据类型，只要指针的地址不改变，就不会报错。
    // const a;
    // a = 20;
    
    // const obj = {name:'张三'};
    // obj.name = "李四"
    // obj.age = 18
    // console.log(obj);
    // obj = {name:'李四'}


    // 什么是暂时性死区？
    
    
    // let i = 10;
    // if (true){
    //   console.log(i);
    //   let i = 20;
    // }

    // 行成暂时性死区的原因？
    // 1.let 没有变量提升
    // 2.变量的查找机制，当前作用域优先查找。


    // var a = 20;
    // function fn(){
    //   console.log(a);
    //   var a = 30;
    // }
    // fn();


   // 扩展运算符
//    let arr = [1,2,3]; 
//    let arr1 = [4,5,6];
//    let arr2 = [...arr,...arr1];
//    let arr2 = arr.concat(arr1);
//    console.log(arr2);
    // let obj = {name:'李四'};
    // console.log({...obj,age:18});
  

   // 3.解构赋值 
   // 数组的解构赋值 数组的解构赋值只和索引有关系
//    let [b,a,c,d] = [1,2,3,4,5];
//    console.log(c);
//    console.log(b);
//    console.log(c);

   // 对象的解构赋值。对象的解构赋值和索引（位置没有关系） 和属性名有关系

   let {name:ma} = {name:"王麻子",age:18};
   console.log(ma);
</script>